module.exports = (app) => {
  const { Schema, model, getModelName, formatDate } = app.jax.mongoose
  const modelName = getModelName(__filename)

  const DemoArticleSchema = new Schema({
    title: String, // 标题
    desc: String, // 描述

    state: { type: Number, default: 0 }, // 状态 0、待审核 1、上线 2、上线
    auditState: { type: Number, default: 0 }, // 审核状态 0、待审核 1、审核通过 2、审核不通过
    auditTime: { type: Date, get: (date) => formatDate(date) }, // 审核时间
    auditRemark: String, // 审核不通过原因

    rank: { type: Number, set: (value) => (value != '' ? Number(value) : null) }, // 序号
    isTop: { type: Boolean, default: false }, // 是否置顶，序号设置后自动置顶

    cover: String, // 封面图
    images: [String], // 封面图
    files: [String], // 文件
    type: { type: Number, default: 0 }, // 类型

    // 上级ID
    typeId: {
      type: Schema.Types.ObjectId,
      set(value) {
        if (!value || value == '0') {
          return null
        }
        return value
      },
    },

    province: String, // 省
    city: String, // 市
    district: String, // 区
    address: String, // 详细地址
  })

  // 修改
  DemoArticleSchema.pre(['updateOne', 'findOneAndUpdate', 'updateMany'], function () {
    const data = this.getUpdate()
    if (data.rank != undefined) {
      if (data.rank) {
        data.isTop = true
      } else {
        data.isTop = false
      }
    }
  })

  // 新增
  DemoArticleSchema.pre('save', function () {
    if (this.rank != undefined) {
      if (this.rank) {
        this.isTop = true
      } else {
        this.isTop = false
      }
    }
  })

  // 状态
  DemoArticleSchema.virtual('stateDesc').get(function () {
    const data = {
      0: '待审核',
      1: '上线',
      2: '下线',
    }

    return data[this.state] || '未知'
  })

  DemoArticleSchema.virtual('auditStateDesc').get(function () {
    const data = {
      0: '待审核',
      1: '审核通过',
      2: '审核不通过',
    }

    return data[this.auditState] || '未知'
  })

  const Model = model(modelName, DemoArticleSchema)

  return Model
}
